#pragma once

#define CINTERFACE
#include <d3d9.h>

#include <string>
#include <vector>

#define typeCreateDeviceParam IDirect3D9* lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface
#define typeResetParam IDirect3DDevice9* lpd3dd, D3DPRESENT_PARAMETERS* pPresentationParameters
#define typeEndSceneParam IDirect3DDevice9* lpd3dd
#define typeReleaseParam IDirect3DDevice9* lpd3dd
#define typeSetFVFParam IDirect3DDevice9* lpd3dd, DWORD FVF
#define typeSetVertexDeclarationParam IDirect3DDevice9* lpd3dd, IDirect3DVertexDeclaration9 * pDecl

// core
typedef ULONG (WINAPI* typeRelease)(typeReleaseParam);
typedef HRESULT (WINAPI* typeCreateDevice)(typeCreateDeviceParam);
typedef HRESULT (WINAPI* typeReset)(typeResetParam);
typedef IDirect3D9* (WINAPI* typeDirect3DCreate9)(UINT SDKVersion);
typedef HRESULT (WINAPI* typeEndScene)(typeEndSceneParam);
typedef HRESULT (WINAPI* typeSetFVF)(typeSetFVFParam);
typedef HRESULT (WINAPI* typeSetVertexDeclaration)(typeSetVertexDeclarationParam);

